// pages/login/login.js
const app = getApp()
const auth = require('../../utils/auth.js')

Page({
  data: {
    isLoading: false,
    isAutoLogin: false,
    userProfile: null // 存储用户授权信息
  },

  onLoad(options) {
    console.log('登录页面加载', options)

    // 检查网络连接
    this.checkNetworkConnection()

    // 延迟检查登录状态，避免闪屏
    setTimeout(() => {
      this.checkLoginStatus()
    }, 500)
  },

  // 检查网络连接
  checkNetworkConnection() {
    console.log('🌐 检查网络连接状态...')

    wx.getNetworkType({
      success: (res) => {
        console.log('📶 网络类型:', res.networkType)
        if (res.networkType === 'none') {
          wx.showToast({
            title: '网络连接异常',
            icon: 'error'
          })
        } else {
          console.log('✅ 网络连接正常')
          // 测试后端连接
          this.testBackendConnection()
        }
      },
      fail: (error) => {
        console.error('❌ 获取网络状态失败', error)
      }
    })
  },

  // 测试后端连接
  testBackendConnection() {
    console.log('🔗 测试后端连接:', getApp().globalData.baseUrl)

    wx.request({
      url: `${getApp().globalData.baseUrl}/test/health`,
      method: 'GET',
      timeout: 3000,
      success: (res) => {
        console.log('✅ 后端连接正常', res)
      },
      fail: (error) => {
        console.error('❌ 后端连接失败', error)
        // 显示网络问题提示
        wx.showModal({
          title: '网络连接问题',
          content: `无法连接到服务器，请检查：\n1. 网络连接是否正常\n2. 服务器是否启动(localhost:8080)\n3. 防火墙设置\n\n错误信息：${error.errMsg}`,
          showCancel: false,
          confirmText: '我知道了'
        })
      }
    })
  },

  onShow() {
    console.log('登录页面显示')
    // 页面显示时检查登录状态
    this.checkLoginStatus()
  },

  onReady() {
    console.log('登录页面渲染完成')
  },



  // 检查登录状态
  checkLoginStatus() {
    const token = wx.getStorageSync('token')
    const userInfo = wx.getStorageSync('userInfo')

    if (token && userInfo) {
      console.log('📱 发现已登录用户:')
      console.log('用户ID:', userInfo.userId)
      console.log('OpenID:', userInfo.openid)
      console.log('昵称:', userInfo.nickname)
      console.log('Token余额:', userInfo.tokenBalance)
      
      // 显示自动登录状态
      this.setData({ isAutoLogin: true })
      
      // 验证Token是否有效
      auth.checkTokenValid().then((isValid) => {
        if (isValid) {
          console.log('Token有效，跳转到首页...')
          setTimeout(() => {
            wx.reLaunch({
              url: '/pages/index/index'
            })
          }, 1500)
        } else {
          console.log('Token无效，需要重新登录')
          this.setData({ isAutoLogin: false })
          this.handleAutoReLogin()
        }
      }).catch((error) => {
        console.error('Token验证失败:', error)
        this.setData({ isAutoLogin: false })
      })
    } else {
      console.log('🔐 用户未登录，显示登录页面')
      this.setData({ isAutoLogin: false })
    }
  },

  // 处理自动重新登录
  handleAutoReLogin() {
    wx.showModal({
      title: '登录已过期',
      content: '您的登录状态已过期，是否重新登录？',
      confirmText: '重新登录',
      cancelText: '稍后再说',
      success: (res) => {
        if (res.confirm) {
          this.handleAuthLogin()
        }
      }
    })
  },

  // 处理授权登录（新的一键登录方法）
  handleAuthLogin(e) {
    console.log('✨ 开始授权登录', e)

    if (this.data.isLoading) {
      console.log('正在登录中，忽略重复点击')
      return
    }

    this.setData({ isLoading: true })

    // 显示登录提示
    wx.showToast({
      title: '正在授权登录...',
      icon: 'loading',
      duration: 3000
    })

    console.log('🔍 开始授权登录流程...')
    console.log('🌐 后端API地址:', getApp().globalData.baseUrl)

    // 先检查网络连接
    wx.getNetworkType({
      success: (networkRes) => {
        if (networkRes.networkType === 'none') {
          this.showLoginError('网络连接异常，请检查网络设置')
          return
        }

        // 获取微信登录凭证并直接登录
        wx.login({
          success: (loginRes) => {
            console.log('✅ wx.login成功', loginRes)

            if (loginRes.code) {
              // 直接调用登录API，不获取用户授权信息
              console.log('📱 直接登录，不获取用户授权信息')
              this.callLoginAPI(loginRes.code)
            } else {
              console.error('❌ 获取微信登录凭证失败', loginRes)
              this.showLoginError('获取登录凭证失败，请重试')
            }
          },
          fail: (error) => {
            console.error('❌ wx.login失败', error)
            this.showLoginError('微信登录失败，请重试')
          }
        })
      },
      fail: (error) => {
        console.error('❌ 获取网络状态失败', error)
        this.showLoginError('网络检查失败，请重试')
      }
    })
  },

  /*
  // 获取用户授权信息 - 功能已隐藏，保留代码备用
  getUserProfile(code) {
    console.log('🔐 开始获取用户授权信息...')
    console.log('📱 即将弹出微信授权框，请用户确认授权')

    // 先显示一个提示，让用户知道即将弹出授权框
    wx.showModal({
      title: '用户授权',
      content: '即将获取您的微信头像和昵称，用于个性化显示。点击确定后请在弹出的授权框中选择"允许"。',
      confirmText: '开始授权',
      cancelText: '跳过授权',
      success: (modalRes) => {
        if (modalRes.confirm) {
          // 用户确认要授权，调用getUserProfile
          console.log('👤 用户确认授权，调用wx.getUserProfile')

          wx.getUserProfile({
            desc: '用于完善用户资料和个性化显示', // 声明获取用户个人信息后的用途
            success: (profileRes) => {
              console.log('✅ 获取用户信息成功', profileRes)
              console.log('👤 用户昵称:', profileRes.userInfo.nickName)
              console.log('🖼️ 用户头像:', profileRes.userInfo.avatarUrl)

              // 保存用户信息
              this.setData({
                userProfile: profileRes
              })

              // 调用后端登录接口，传递用户信息
              this.callLoginAPI(code, profileRes.encryptedData, profileRes.iv)
            },
            fail: (error) => {
              console.log('⚠️ 用户拒绝授权或获取失败', error)

              // 用户拒绝授权，询问是否继续登录
              wx.showModal({
                title: '授权被拒绝',
                content: '您拒绝了头像和昵称授权。您可以选择重新授权或直接登录（将使用默认头像和昵称）。',
                confirmText: '重新授权',
                cancelText: '直接登录',
                success: (retryModalRes) => {
                  if (retryModalRes.confirm) {
                    // 用户选择重新授权
                    this.getUserProfile(code)
                  } else {
                    // 用户选择直接登录，不传递用户信息
                    console.log('📱 用户选择直接登录，不获取头像昵称')
                    this.callLoginAPI(code)
                  }
                }
              })
            }
          })
        } else {
          // 用户选择跳过授权，直接登录
          console.log('📱 用户跳过授权，直接登录')
          this.callLoginAPI(code)
        }
      }
    })
  },
  */

  // 处理微信登录（保留原方法，兼容性）
  handleWechatLogin(e) {
    // 直接调用新的授权登录方法
    this.handleAuthLogin(e)
  },

  // 调用后端登录API
  callLoginAPI(code) {
    console.log('📡 调用登录API', { code })
    console.log('🔗 请求URL:', `${getApp().globalData.baseUrl}/auth/wechatLogin`)

    const requestData = {
      code: code
    }

    console.log('📝 简单登录，不获取用户授权信息')

    // 先测试网络连接
    console.log('🌐 测试网络连接...')
    wx.request({
      url: `${getApp().globalData.baseUrl}/test/health`,
      method: 'GET',
      timeout: 5000,
      success: (healthRes) => {
        console.log('✅ 网络连接正常', healthRes)
        // 网络正常，继续登录请求
        this.performLoginRequest(requestData)
      },
      fail: (healthError) => {
        console.error('❌ 网络连接失败', healthError)
        this.showLoginError('网络连接失败，请检查网络设置或稍后重试')
      }
    })
  },

  // 执行实际的登录请求
  performLoginRequest(requestData) {

    const app = getApp()

    wx.request({
      url: `${app.globalData.baseUrl}/auth/wechatLogin`,
      method: 'POST',
      header: {
        'Content-Type': 'application/json'
      },
      data: requestData,
      timeout: 10000, // 10秒超时
      success: (res) => {
        console.log('✅ 登录API响应成功', res)
        console.log('📊 响应状态码:', res.statusCode)
        console.log('📄 响应数据:', res.data)
        this.handleLoginResponse(res)
      },
      fail: (error) => {
        console.error('❌ 登录API请求失败', error)
        console.error('🔍 错误详情:', JSON.stringify(error))
        this.setData({ isLoading: false })

        // 根据错误类型显示不同提示
        if (error.errMsg && error.errMsg.includes('timeout')) {
          this.showLoginError('请求超时，请检查网络连接')
        } else if (error.errMsg && error.errMsg.includes('fail')) {
          this.showLoginError(`网络连接失败：${error.errMsg}`)
        } else {
          this.showLoginError(`登录请求失败：${error.errMsg || '未知错误'}`)
        }
      }
    })
  },

  // 处理登录响应
  handleLoginResponse(res) {
    this.setData({ isLoading: false })

    // 检查HTTP状态码
    if (res.statusCode !== 200) {
      console.error('HTTP请求失败', res)
      this.showLoginError(`服务器错误 (${res.statusCode})，请稍后重试`)
      return
    }

    // 检查业务状态码
    if (res.data.code === 1) {
      const { token, userInfo } = res.data.data

      console.log('🎉 登录成功！用户信息详情:')
      console.log('Token:', token)
      console.log('用户信息:', userInfo)
      console.log('用户ID:', userInfo.userId)
      console.log('OpenID:', userInfo.openid)
      console.log('昵称:', userInfo.nickname)
      console.log('Token余额:', userInfo.tokenBalance)

      // 特别关注 openid，用于验证是否使用固定值
      console.log('🔑 重要：OpenID =', userInfo.openid)
      if (userInfo.openid === 'dev_test_openid_fixed') {
        console.log('✅ 使用了固定的开发测试 OpenID，不会重复创建用户')
      } else {
        console.log('⚠️ OpenID 不是固定值，可能会重复创建用户')
      }

      // 验证返回数据的完整性
      if (!token || !userInfo) {
        console.error('登录响应数据不完整', res.data)
        this.showLoginError('登录数据异常，请重试')
        return
      }

      // 保存登录信息到本地存储
      try {
        // 使用auth工具方法保存登录信息
        auth.saveLoginInfo(token, userInfo)

        console.log('用户信息保存成功', userInfo)

        // 显示登录成功提示
        const tokenBalance = userInfo.tokenBalance || 100
        wx.showToast({
          title: `登录成功！获得${tokenBalance}个Token`,
          icon: 'success',
          duration: 2000
        })

        // 延迟跳转到首页
        setTimeout(() => {
          wx.reLaunch({
            url: '/pages/index/index'
          })
        }, 1500)

      } catch (error) {
        console.error('保存用户信息失败', error)
        this.showLoginError('保存登录信息失败，请重试')
      }

    } else {
      // 登录失败，处理具体错误码
      const errorCode = res.data.code
      const errorMsg = res.data.msg || '登录失败'

      console.error('登录失败', res.data)

      // 根据错误码显示不同提示
      switch (errorCode) {
        case 10001:
          this.showLoginError('微信授权码无效，请重新登录')
          break
        case 10004:
          this.showLoginError('账户已被禁用，请联系管理员')
          break
        default:
          this.showLoginError(errorMsg)
      }
    }
  },

  // 显示登录错误
  showLoginError(message) {
    this.setData({ isLoading: false })

    wx.showModal({
      title: '登录失败',
      content: message,
      showCancel: true,
      cancelText: '取消',
      confirmText: '重试',
      success: (res) => {
        if (res.confirm) {
          console.log('用户点击重试')
          // 可以在这里重新触发登录流程
        } else {
          console.log('用户取消重试')
        }
      }
    })
  },





  // 显示隐私政策
  showPrivacyPolicy() {
    wx.showModal({
      title: '隐私政策与用户协议',
      content: `我们非常重视您的隐私保护和个人信息安全。

用户协议要点：
• 本应用仅获取必要的用户信息
• 不会收集您的敏感个人信息
• 所有数据传输均经过加密处理

隐私政策要点：
• 我们只收集提供服务所必需的信息
• 不会与第三方分享您的个人信息
• 您可以随时删除您的账户和数据

如有疑问，请联系客服。`,
      showCancel: false,
      confirmText: '我已了解'
    })
  },

  // 页面分享
  onShareAppMessage() {
    return {
      title: 'AI虚拟换装 - 智能换装，美丽无限',
      path: '/pages/login/login',
      imageUrl: '/images/share-image.png'
    }
  }
})
